package com.miraclengine.utils;

import android.app.ProgressDialog;
import android.os.AsyncTask;
import android.os.Handler;

import com.miraclengine.xml.DataTable;

public class ProgressAsyncTask extends AsyncTask<String, String, DataTable> {

	public interface CallBack {
		public abstract void onPostExecute(DataTable obj);
		public abstract DataTable doInBackground(String... datas);
	}
	
	private final static String TAG = ProgressAsyncTask.class.getSimpleName();
	
//	private Context context = null;
	private Handler handler = null;
	private CallBack mCallBack;
	private ProgressDialog progDlg = null;
	private String[] mParams;
	
	
	
	//Construct1
	public ProgressAsyncTask() {
		//this.context = context;
		
		//새로운 커넥션이 발생하면 result code 및 message를 초기화.
		GlobalStatic.LAST_EXCUTE_RESULT_CODE = "";
		GlobalStatic.LAST_EXCUTE_RESULT_DESCRIPTION = "";
	}
	
	//Construct2
	public ProgressAsyncTask(CallBack callBack, Handler handler) {
		//this.context = context;
		this.handler = handler;
		this.mCallBack = callBack;
		
		//새로운 커넥션이 발생하면 result code 및 message를 초기화.
		GlobalStatic.LAST_EXCUTE_RESULT_CODE = "";
		GlobalStatic.LAST_EXCUTE_RESULT_DESCRIPTION = "";
	}
	
	@Override
	public void onPreExecute() {
		super.onPreExecute();
	}
	
	@Override
	protected DataTable doInBackground(String... params) {
		// TODO Auto-generated method stub
		mParams = params;
		
		DataTable dt = null;
		
		try {
			dt = mCallBack.doInBackground(params);   
		} catch(Exception e) {
			Debug.d(TAG, "doInBackground : " + e.getMessage());
			//handler.post(alert);
		}
		
		return dt;
	}
	
	@Override
	public void onPostExecute(DataTable dt) {
		Debug.i(TAG, "result code : " + GlobalStatic.LAST_EXCUTE_RESULT_CODE);
		Debug.i(TAG, "result message : " + GlobalStatic.LAST_EXCUTE_RESULT_DESCRIPTION);
		
//		try {
//			//서버 커넥션 수행결과가 없으면 XML parsing error
//			if(dt == null) {
//				AlertDialog.Builder builder = new AlertDialog.Builder(context);
//				builder.setTitle("알림 ");
//				builder.setMessage("서버와 통신 간 오류가 발생했습니다. \n" +
//								"다음 상태를 확인해주세요. \n" +
//								"1. 서버에 문제가 발생했을 수 있습니다. \n" +
//								"2. 업데이트를 확인해주세요."
//				);
//				builder.setNegativeButton("확인", new DialogInterface.OnClickListener() {
//					
//					@Override
//					public void onClick(DialogInterface dialog, int which) {
//						// TODO Auto-generated method stub
//						if(context.getClass().getSimpleName().equals("WebPostTest")) {
//							if(progDlg != null) {
//								progDlg.dismiss();
//								progDlg = null;
//							}
//							return;
//						}
//						
//						((Activity)context).onBackPressed();
//					}
//				});
//				builder.show();
//				return;
//			}
			mCallBack.onPostExecute(dt);
		//} catch(Exception e) {
		//	e.printStackTrace();
		//	Debug.d(TAG, "onPostExecute : " + e.getMessage());
		//}
		
		super.onPostExecute(dt);
		
//		try {
//			if(progDlg != null) {
//				progDlg.dismiss();
//				progDlg = null;
//			}
//		} catch(IllegalArgumentException e) {
//			e.printStackTrace();
//		}
	}
	
	@Override
	public void onCancelled() {
		Debug.d(TAG, "onCancelled!");
		super.onCancelled();
	}
	
	@Override
	public void onProgressUpdate(String... values) {
		super.onProgressUpdate(values);
	}
	
	@Override
	public void finalize() {
		Debug.d(TAG, "finalize");
		
		try {
			super.finalize();
		} catch(Throwable e) {
			Debug.d(TAG, e.getMessage());
			e.printStackTrace();
		}
		
//		try {
//			if(progDlg != null) {
//				progDlg.dismiss();
//				progDlg = null;
//			}
//		} catch(Exception e) {
//			e.printStackTrace();
//		}
	}
	
	
//	private Runnable alert = new Runnable() {
//		public void run() {
//			try {
//				
//				final AlertDialog.Builder builder = new AlertDialog.Builder(context);
//				builder.setTitle("알림 ");
//				builder.setMessage("서버와 통신에 실패했습니다. \n" + 
//							"다음 상태를 확인해주세요. \n" +
//							"1. 단말의 네트워크 상태를 확인해주세요. \n" +
//							"2. 서버에 문제가 발생했을 수 있습니다. \n" +
//							"   담당자에게 확인해주세요. ");
//				
//				builder.setPositiveButton("다시 시도", new DialogInterface.OnClickListener() {	
//					@Override
//					public void onClick(DialogInterface dialog, int which) {
//						// TODO Auto-generated method stub
//						doInBackground(mParams);
//					}
//				});
//				
//				builder.setNeutralButton("뒤로 가기", new DialogInterface.OnClickListener() {
//					
//					@Override
//					public void onClick(DialogInterface dialog, int which) {
//						// TODO Auto-generated method stub
//						if(context.getClass().getSimpleName().equals("WebPostTest")) return;
//						((Activity)context).onBackPressed();
//						
//					}
//				});
//				
//				builder.setNegativeButton("확인", new DialogInterface.OnClickListener() {
//					
//					@Override
//					public void onClick(DialogInterface dialog, int which) {
//						// TODO Auto-generated method stub
//						
//						
//					}
//				});
//				
//				builder.show();
//				
//			} catch(Exception e) {
//				Debug.e(TAG, e.getMessage());
//			}
//		}
//	};

}
